package com.haiwei.poi.word.poi;

import com.haiwei.poi.common.HaiweiListUtils;
import com.haiwei.poi.common.HaiweiStringUtil;
import com.haiwei.poi.word.bean.HaiweiBeanUtil;
import com.haiwei.poi.word.manager.HaiweiPatternUtil;
import com.haiwei.poi.word.sign.HaiweiSignParser;
import com.haiwei.poi.word.sign.HaiweiTextSign;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import java.util.List;

/**
 * 段落处理类.
 *
 * @date: 2022-06-25
 * @version: 1.0
 * @author: karry@haiwei.com
 */
@Slf4j
public class HaiweiParagraphUtil {
    
    /**
     * 解析段落
     * @param paragraphs
     */
    public static void pause(List<XWPFParagraph> paragraphs) {
        if(HaiweiListUtils.isNotEmpty(paragraphs)){
            for(XWPFParagraph paragraph : paragraphs){
                
                // 处理段落中的文本框
                HaiweiTextBoxUtil.parseByXPath(paragraph);
                
                // 数组： AA BB ##{ Customer1 . Name } CC
                List<XWPFRun> runs = paragraph.getRuns();
                int i = 0;
                for(; i < runs.size() ; i++){
                    XWPFRun run = runs.get(i);
                    String text = run.getText(0);
                    
                    // 必须保证中间没有空格
                    text = HaiweiStringUtil.removeWhitespace(text);
                    
                    // 判断是否需要合并处理
                    if(HaiweiPatternUtil.isNeededMergeRun(text)){
                        i = HaiweiXWPFRunUtil.mergeRun(text,i,runs);
                    }
                    
                    //再次获取参数
                    text = run.getText(0);
                    if(HaiweiSignParser.isSign(text)){
                        // 解析标签
                        HaiweiTextSign sign = HaiweiSignParser.parse(text);
                        // 根据路径获取值
                        Object value = HaiweiBeanUtil.getValue(sign.getPath());
                        // 填充内容,需要拼接起来
                        HaiweiXWPFRunUtil.fillXWPFRunContent(run
                                ,sign.getBeforSignContext() + value + sign.getAfterSignContext());
                    }
                }
            }
        }
    }
    


}
